#ifndef __BSP_HCSR04_H
#define __BSP_HCSR04_H

#include <stdint.h>
#include "stm32f10x.h"
#include "delay.h"
#include "bsp_systick.h"

// 选择是不是复用了Jlink的端口
#define     REMAP_SWJ_JTAG          1


#define 	Trig_Pin				GPIO_Pin_4
#define 	Trig_Port 				GPIOB

#define 	Echo_Pin				GPIO_Pin_2
#define 	Echo_Port				GPIOB

#define     RCC_GPIO_Port           RCC_APB2Periph_GPIOB

//          提供延迟15微秒的延迟接口
//#define     Delay_15us()            Delay_us(15)
#define     Delay_15us() 			Precise_Delay_us(15)

// 定义不同的中断函数记得切换宏定义
#define     TIMER                   TIM4
#define     TIMER_IRQn              TIM4_IRQn
#define     RCC_Periph_TIMER        RCC_APB1Periph_TIM4
#define     TIMER_IRQn_FUN          TIM4_IRQHandler                                                          \


#define 	PREVENT_STUCK		    1

/**
 * @brief 超声波模块的初始化函数
 * 
 * 该函数负责对超声波模块进行初始化操作，包括但不限于配置相应的 GPIO 引脚、时钟、触发和回声引脚的设置等。
 * 确保在调用 HC_SR04_GetDistance_mm 函数之前调用此函数，以保证超声波模块正常工作。
 *
 * @param 无
 * @return 无
 * 
 * @example
 * HC_SR04_Init();
 */
void HC_SR04_Init(void);

/**
 * @brief 测量超声波模块到目标物体的距离
 * 
 * 此函数会触发超声波模块发送超声波信号，并等待接收回声信号。通过测量发送和接收之间的时间差，计算出距离。
 * 距离的计算基于声音在空气中的传播速度，在标准条件下，约为 340m/s。该函数会根据回声信号的接收情况，将距离以毫米为单位返回。
 * 
 * @param 无
 * @return succeed:测得的距离（单位：毫米）；failed:-1，表示测量失败，可能由于超时或其他异常情况导致。
 * 
 * @example
 * int16_t distance = HC_SR04_GetDistance_mm();
 * if (distance == -1) {
 *     // 处理测量失败的情况
 * } else {
 *     // 处理测量成功的情况，使用 distance 变量
 * }
 */
int32_t HC_SR04_GetDistance_mm(void);

#endif



